/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ua.yandex.bank;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Neophron
 */
public class Bank {

    private final List<Account> accounts;

    public Bank() {
        accounts = new ArrayList<>();
    }

    public void addAccount(int amount) {
        accounts.add(new Account(amount));
    }

    public long getCash() {
        long res = 0;
        synchronized (this) {
            for (int i = 0; i < accounts.size(); i++) {
                res += accounts.get(i).get();
            }
        }
        return res;
    }

    public void transfer(int from, int to, int amount) {
        if ((from == to || from >= accounts.size() || to >= accounts.size())
                && amount > 0) {
            return;
        }
        //Тут не нужна атомарность. Метод withdraw lock-free и он возвращает 
        //снятую сумму, если на счету было достаточно денег, иначе 
        //он возвращает 0 и все остаются при своих.
        accounts.get(to).deposit(accounts.get(from).withdraw(amount));
    }

}
